home *** CD-ROM | disk | FTP | other *** search
/ Directorty Opus 5 - Magellan 2 / Opus 5 - Magellan 2.iso / Extras / cdda_mpeg_op5 / arexx / PlayCDDA_JB.dopus5 next >
Text File  |  1996-01-02  |  25KB  |  683 lines

  1. /* Programm: PlayCDDA_JB.dopus5 [1-Januar-1996]
  2. ** $VER: PlayCDDA_JB.dopus5 1.5 (1-Jan-1996)
  3. ** 
  4. ** Needed: Directory Opus 5.11 (© by Jonathan Potter & GPSoftware)
  5. **         Jukebox 2.1 (© 1991-1995 by Franz-Josef Reichert),
  6. **         for save: CDDA-Filesystem (© 1994-1995 by Franz-Josef Reichert)  
  7. **                   or/and:
  8. **
  9. **           only for save MPEG Layer 2:
  10. **           musicin & MPEGTables (FPU required !)
  11. **           only for save 8SVX & AIFF (Toshiba & Sony CDROM):
  12. **           CDDA 1.12 (Author: mlelstvspecklec.mpifr-bonn.mpg.de)
  13. **           only for save ADPCM3 (Toshiba CDROM):
  14. **           CDRipper (Author: flowerpeikon.e-technik.tu-muenchen.de)
  15. **         save WAV, AIFF, VOC, AU needed Amisox 3.3
  16. **
  17. **
  18. ** Copyright © 1996 Eckhard Ludwig (EMail: Eckhard@top.east.de)
  19. ** PlayCDDA_JB.dopus5 is freeware. It may be distributed freely.
  20. **
  21. ** Play Audio-CD from DOPUS5, Test Play Audio-CD, Save Tracks to
  22. ** MPEG Layer2, RAW, IFF 8SVX, AIFF, WAVE, VOC, AU & ADPCM3.
  23. ** For play the samples see PlayHifi.dopus5
  24. **
  25. ** Create new button (CDDA Jukebox), Call as:
  26. ** ----------------------------------------------------------------------
  27. ** ARexx    DOpus5:ARexx/PlayCDDA_JB.dopus5 {Qp}
  28. ** ----------------------------------------------------------------------
  29. ** Set Attribut: "Output to window" (Ausgabe in Fenster).
  30. **
  31. */
  32.  
  33. /*--------S E T T I N G S : --------------------------------------------*/
  34. /* If the file ENV:PlayCDDA_JB.PREFS exists, that one will override the */
  35. /* settings here ...                                                    */
  36.  
  37. /* Path to Jukebox (© 1991-1995 by Franz-Josef Reichert)*/
  38. CDPlay = "WORK:Jukebox/Jukebox"
  39. CDDA_FS= "Work:Jukebox/CDDA"
  40. Playmodul="Intern"
  41. MusikCat="WORK:Jukebox/musiccatalog.cat"
  42. Changeint=1
  43. Fontname= "topaz.font"
  44. Fontheight=8
  45. Device = "scsi.device"
  46. Unit   = "3"
  47. Fakedmcn="0"
  48.  
  49. Amisox=  "C:SOX020"
  50.  
  51. /* Path to MPEG-Encoding */
  52. MPEGENC= "DOpus5:MpegAudio/musicin -b 192 -d c -m j"
  53. MPEGTAB= "DOpus5:MpegAudio/Tables"
  54.  
  55. /* Path to CDDA 1.12 */
  56. CDSave = "C:CDDA" /* only for Toshiba/Sony CDROM & save AIFF & IFF 8SVX */
  57.  
  58. /* Path to CDRipper  */
  59. CDRip = "C:CDRipper" /* only for Toshiba CDROM & save ADPCM3 */
  60.  
  61. /*-Volume Settings-----Auslaufzeit---------------------------------------*/
  62.  
  63. CDROMVOLUME=0 /* 1 to 255 ? (see doc of your cdrom !)
  64.                  0 = no volumesetting                  */
  65.  
  66. RESTTIME="00:02:00"  /* Auslaufzeit eines Titel */
  67.              /* For Play, Save over CDDA 1.12 */
  68.  
  69. /*--end of settings------------------------------------------------------*/
  70.  
  71.  
  72. /*--Hauptprogramm--------------------------------------------------------*/
  73.  
  74. if ~show('l','rexxsupport.library') then
  75.     call addlib('rexxsupport.library',0,-30,0)
  76. if ~openport('playcdda-handler') then exit
  77.  
  78. signal on syntax
  79. options results
  80. options failat 21
  81. lf='0a'x
  82.  
  83. if open(1,'env:PlayCDDA_JB.prefs','R') then do /* Environment-Variable auswerten */
  84.    do i=1 to 16
  85.     prefs.i = readln(1)
  86.         end
  87.    if prefs.2 ~="" then CDPlay=prefs.2
  88.    if prefs.3 ~="" then CDSave=prefs.3
  89.    if prefs.4 ~="" then CDRip =prefs.4
  90.    if prefs.5 ~="" then CDROMVOLUME=prefs.5
  91.    if prefs.6 ~="" then RESTTIME=prefs.6
  92.    if prefs.7 ~="" then MusikCat=prefs.7
  93.    if prefs.8 ~="" then Device=prefs.8
  94.    if prefs.9 ~="" then Unit=prefs.9
  95.    if prefs.10 ~="" then Playmodul=prefs.10
  96.    if prefs.11 ~="" then Changeint=prefs.11
  97.    if prefs.12 ~="" then Fakedmcn=prefs.12
  98.    if prefs.13 ~="" then CDDA_FS=prefs.13
  99.    if prefs.14 ~="" then Amisox=prefs.14
  100.    if prefs.15 ~="" then MPEGENC=prefs.15
  101.    if prefs.16 ~="" then MPEGTAB=prefs.16
  102.    drop prefs.
  103.    call close(1)
  104.    end
  105.  
  106. /* init locale standard=deutsch */
  107. if ~show(l,'locale.library') then
  108.         call addlib('locale.library',0,-30)
  109. if show(l,'locale.library') then
  110.         catalog=opencatalog('PlayCDDA_JB.catalog','deutsch',0)
  111.  
  112. parse arg portname
  113. if portname='' then portname='DOPUS.1'
  114. address value portname
  115.  
  116. if Playmodul="Intern" then PLMD=" "
  117.    else PLMD="PLAYER="Playmodul
  118.  
  119. if ~show('P','JUKEBOX.0') then do  /* Jukebox wird gestartet */
  120.    if ~exists(CDPlay) then do
  121.       dopus front
  122.       dopus request '"'getcatstr(0,'Fehler:'lf'Jukebox nicht gefunden (Pfad: %s ?).'lf'Setze Pfad oder starte Jukebox zuerst !',CDPlay)'"' getcatstr(1,'Beenden')
  123.       Exit
  124.       end
  125.    call pragma("STACK",12000)
  126.    address command "Run >NIL: "CDPlay" PUBSCREEN=Workbench "PLMD" DEVICE="Device" UNIT="Unit" CHANGEINT="Changeint" CATALOG="MusikCat" FAKEDMCN="Fakedmcn" FONTNAME="Fontname" FONTHEIGHT="Fontheight
  127.    dopus request '"'getcatstr(20,'Bitte warten !'lf'Der externe CDDA-Player Jukebox wird gestartet.')'"' 'OK'
  128.    address command 'waitforport JUKEBOX.0'
  129. end
  130.     
  131. address 'JUKEBOX.0'   
  132. TOC 0   /* Test auf PD-Version von Jukebox, siehe result */
  133. if result='freely distributable release' then do
  134.       address value portname
  135.       dopus front
  136.       dopus request '"'getcatstr(2,'Fehler:'lf'Frei verteilbare Version von Jukebox gefunden.'lf'PlayCDDA_JB.dopus5 läuft nur mit der registrierten Version !'lf'Bitte lassen Sie sich für Jukebox registrieren.')'"' getcatstr(1,'Beenden')
  137.       call closeport('playcdda-handler')
  138.       Exit
  139.       end
  140.     
  141. if show(l,'locale.library') then
  142.         jb_catalog=opencatalog('jukebox.catalog','english',0)
  143. cdstring='<no title assigned>'  /* CD nicht im Katalog ?, von Jukebox zugeordneten Titel (sprachabhängig) ermitteln */
  144. if jb_catalog~=0 then cdstring=getcatalogstr(jb_catalog,53,cdstring)
  145.  
  146. address value portname
  147. lister new  /* Opus-Lister wird geöffnet */
  148. handle=result
  149.  
  150. do forever   /* Schleife bei CD-Wechsel */
  151.    CDDA=0
  152.    address 'JUKEBOX.0'   
  153.    MAXTRACK=numtrks() /* letzten Track ermitteln */
  154.    if MAXTRACK=0 then call Meldung1 /* Keine CD eingelegt */
  155.    STOP
  156.    CURRENT LABEL /* Label der CD aus Katalog */
  157.    cdname=result
  158.    if cdname='result' then call Ende /* Jukebox wurde beendet */
  159.    if cdname=cdstring then cdname=getcatstr(3,'CD nicht im Medienkatalog')
  160.    address value portname
  161.    lister set handle title cdname
  162.    lister set handle sort name /* Lister nach Namen (da Nummern vorangestellt werden) sortieren */
  163.    lister set handle busy on
  164.    lister set handle progress MAXTRACK getcatstr(4,'Erstelle Titelliste ...')
  165.    lister refresh handle full  
  166.    do i=1 to MAXTRACK
  167.       lister query handle abort              /* welcher Idiot will jetzt abbrechen ?*/
  168.       if result then leave
  169.       lister set handle progress count i
  170.       lister set handle progress name getcatstr(5,'Titel')'  'i
  171.       address 'JUKEBOX.0'
  172.       TOC i
  173.       if RC>0 then leave              /* falls während einlesen CD ausgeworfen wird */
  174.       TRACKINFO=result
  175.       NPOS=pos('22'x,TRACKINFO)       /* Trackinfo zerlegen */
  176.       SONGNAME=substr(TRACKINFO,NPOS+1,length(TRACKINFO)-NPOS-1)
  177.       SONGINFO=left(TRACKINFO,NPOS-2)
  178.       BLOCKS=(left(SONGINFO,2)*60+substr(SONGINFO,4,2))*75+substr(SONGINFO,7,2)
  179.       BLOCKSIZE=2048
  180.       if bittst(right(SONGINFO,2),2)=1 then SONGNAME=getcatstr(6,'Daten Track') /* eine CD mit Datentracks */
  181.          else do
  182.      CDDA=1    /* wenigsten ein Audio-Track sollte drauf sein */
  183.      BLOCKSIZE=2352
  184.      end
  185.       j=right(i,2)
  186.       address value portname   
  187.       lister add handle '"'j" "SONGNAME'" 'BLOCKS*BLOCKSIZE' -1 'i' r 'left(SONGINFO,5)"   "substr(SONGINFO,9,20)
  188.       lister set handle display name size comment
  189.       lister refresh handle full
  190.    end
  191.    address 'JUKEBOX.0'
  192.    TOC 0
  193.    if RC>0 then do  /* wurde CD ausgeworfen ? */
  194.     address value portname
  195.     lister set handle busy off
  196.     lister clear handle
  197.     lister refresh handle full
  198.     iterate     /* dann an Schleifen-Anfang, wo dies gemeldet wird */
  199.     end
  200.    cdtoc=result    /* CD merken für Vergleiche */
  201.    address value portname
  202.    lister set handle busy off
  203.  
  204.    if CDDA~=1 then do  /* CD nur Datentracks ?*/
  205.     lister set handle busy on
  206.     dopus request '"'getcatstr(21,'Fehler:'lf'CD enthält nur Datentracks !')'"' getcatstr(26,'Beenden|Ok')
  207.     if RC=1 then do
  208.            lister set handle busy off
  209.            call Ende
  210.            end
  211.     lister set handle busy off
  212.     lister clear handle
  213.     lister refresh handle full
  214.     iterate
  215.     end
  216.  
  217.    lister set handle handler 'playcdda-handler' 'quotes'
  218.  
  219.    /* install traps */
  220.    address value portname
  221.    dopus addtrap copy 'playcdda-handler'
  222.    dopus addtrap move 'playcdda-handler'
  223.    dopus addtrap copyas 'playcdda-handler'
  224.    dopus addtrap moveas 'playcdda-handler'
  225.    dopus addtrap read 'playcdda-handler'
  226.    dopus addtrap hexread 'playcdda-handler'
  227.    dopus addtrap delete 'playcdda-handler'
  228.    dopus addtrap rename 'playcdda-handler'
  229.    dopus addtrap devicelist 'playcdda-handler'
  230.    dopus addtrap parent 'playcdda-handler'
  231.    dopus addtrap root 'playcdda-handler'
  232.    dopus addtrap show 'playcdda-handler'
  233.    dopus addtrap play 'playcdda-handler'
  234.    dopus addtrap protect 'playcdda-handler'
  235.    dopus addtrap datestamp 'playcdda-handler'
  236.    dopus addtrap comment 'playcdda-handler'
  237.    dopus addtrap makedir 'playcdda-handler'
  238.    dopus addtrap addicon 'playcdda-handler'
  239.    dopus addtrap cachelist 'playcdda-handler'
  240.  
  241.    do forever
  242.      if waitpkt('playcdda-handler') then do
  243.        packet=getpkt('playcdda-handler')
  244.        if packet='00000000'x then iterate
  245.        event=getarg(packet,0)
  246.        handle=getarg(packet,1)
  247.        titel=getarg(packet,2)
  248.        user=getarg(packet,3)
  249.        pathstr=getarg(packet,4)
  250.        if event="Root" then leave
  251.        if event="Parent" then leave
  252.        if event="parent" then leave
  253.        if event="inactive" then call Ende
  254.        address 'JUKEBOX.0'
  255.        CURRENT STATUS
  256.        if result="NODISC" then leave /* CD wurde vor Play entnommen ! */
  257.        TOC 0
  258.        if RC>0 then leave
  259.        if result~=cdtoc then leave  /* CD wurde vertauscht ! */
  260.        T_FLAG=0
  261.         select
  262.           when event="doubleclick" then call Player
  263.           when event="Play" then call SelPlay
  264.           when event="path" then iterate
  265.           when event="Show" then call CDTest
  266.           when event="Copy" then call SaveCD
  267.           when event="Move" then call SaveCD
  268.           when event="CopyAs" then call SaveCDAs
  269.           when event="MoveAs" then call SaveCDAs
  270.           when event="MakeDir" then call CDEject
  271.            when event="AddIcon" then call CDEject
  272.           when event="CacheList" then call CDEject
  273.           when event="dropfrom" then call SaveCD
  274.           when event="drop" then iterate
  275.           otherwise call Productinfo
  276.         end
  277.        address value portname
  278.        reply(packet,10)
  279.      end
  280.      address 'JUKEBOX.0'
  281.      CURRENT STATUS
  282.      if result="NODISC" then leave /* CD wurde während Play entnommen ! */
  283.    end
  284.    address value portname
  285.    lister clear handle
  286.    lister refresh handle full
  287. end      /* Ende Schleife bei CD-Wechsel */
  288.  
  289. /*---Unterprogramm CD auswerfen------------------------------------------------------------------*/
  290. CDEject:
  291. address 'JUKEBOX.0'
  292. EJECT
  293. return
  294.  
  295. /*---Unterprogramm selektierte Titel spielen-----------------------------------------------------*/
  296. SelPlay:
  297. address value portname
  298. lister set handle busy on
  299. lister query handle selfiles stem files.
  300.  
  301. address 'JUKEBOX.0'
  302. LOCKGUI
  303. STOP
  304. do i=0 to files.count-1
  305.    titel=files.i
  306.    call Player
  307.    address 'JUKEBOX.0'
  308.    CURRENT TIME
  309.    waittime=result
  310.    CURRENT TRKTIME
  311.    SUBTIME result RESTTIME
  312.    trtime=result
  313.    ADDTIME waittime trtime
  314.    endtime=result
  315.    sec=left(trtime,2)*60+substr(trtime,4,2)
  316.    j=1
  317.    address value portname
  318.    lister set handle progress sec getcatstr(7,'Spiele Audio-CD ...  Titel')' 'i+1'/'files.count
  319.    lister refresh handle full  
  320.    do forever
  321.       address 'JUKEBOX.0'
  322.       CURRENT STATUS
  323.       if result~="PLAY" then leave /* CD wurde entnommen */
  324.       CURRENT RELTIME
  325.       SUBTIME trtime result
  326.       rsttime=result
  327.       ADDTIME waittime "00:01:00"
  328.       waittime=result
  329.       j=j+1
  330.       WAIT TIME waittime  
  331.       address value portname
  332.       lister set handle progress count j
  333.       lister set handle progress name left(rsttime,5)' 'substr(files.i,4,25)
  334.       lister query handle abort
  335.       if result then do
  336.         lister set handle busy off
  337.         lister clear handle progress
  338.         lister refresh handle full
  339.         address 'JUKEBOX.0'
  340.         STOP
  341.             UNLOCKGUI
  342.         return
  343.         end
  344.       if rsttime < "00:01:00" then do
  345.        WAIT TIME endtime
  346.        leave
  347.        end     
  348.    end
  349.    address value portname
  350.    lister select handle '"'files.i'"' off
  351.    lister clear handle progress
  352.    lister refresh handle full
  353. end
  354. lister set handle busy off
  355. address 'JUKEBOX.0'
  356. STOP
  357. UNLOCKGUI
  358. return
  359.  
  360. /*---Unterprogramm Play -------------------------------------------------------------------------*/
  361. Player:
  362. address 'JUKEBOX.0'
  363. SET TRACK left(titel,2)
  364. if getcatstr(6,'Daten Track') = substr(titel,4) then return  /* Datentrack return */
  365. CURRENT VOLUME RESOLUTION
  366. if (CDROMVOLUME<result) & (CDROMVOLUME>0) then do
  367.    CHANNEL BOTH
  368.    SET VOLUME CDROMVOLUME CDROMVOLUME
  369.    end
  370. PLAY
  371. return
  372.  
  373. /*---Unterprogramm Titel anspielen---------------------------------------------------------------*/
  374. CDTest:
  375. address value portname
  376. dopus request '"'getcatstr(8,'Audio-CD anspielen:'lf''lf'Die Titel anspielen für wie lang ?')'"' getcatstr(9,'15s|30s|45s|Abbruch')
  377. if RC=0 then return
  378. if RC=1 then sptime="00:15:00"
  379. if RC=2 then sptime="00:30:00"
  380. if RC=3 then sptime="00:45:00"
  381.  
  382. address value portname
  383. lister set handle busy on
  384. lister query handle selfiles stem files.
  385.  
  386. address 'JUKEBOX.0'
  387. LOCKGUI
  388. STOP
  389. do i=0 to files.count-1
  390.    titel=files.i
  391.    call Player
  392.    address 'JUKEBOX.0'
  393.    CURRENT TIME
  394.    waittime=result
  395.    CURRENT TRKTIME
  396.    SUBTIME result RESTTIME
  397.    trtime=result
  398.    if sptime<trtime then trtime=sptime
  399.    sec=left(trtime,2)*60+substr(trtime,4,2)
  400.    j=1
  401.    address value portname
  402.    lister set handle progress sec getcatstr(10,'Spiele Titel kurz an ...  Titel')' 'i+1'/'files.count
  403.    lister refresh handle full  
  404.    do forever
  405.       address 'JUKEBOX.0'
  406.       CURRENT STATUS
  407.       if result~="PLAY" then leave /* CD wurde entnommen */
  408.       CURRENT RELTIME
  409.       SUBTIME trtime result
  410.       rsttime=result
  411.       ADDTIME waittime "00:01:00"
  412.       waittime=result
  413.       j=j+1
  414.       WAIT TIME waittime  
  415.       address value portname
  416.       lister set handle progress count j
  417.       lister set handle progress name left(rsttime,5)' 'substr(files.i,4,25)
  418.       lister query handle abort
  419.       if result then do
  420.         lister set handle busy off
  421.         lister clear handle progress
  422.         lister refresh handle full
  423.         address 'JUKEBOX.0'
  424.         STOP
  425.             UNLOCKGUI
  426.         return
  427.         end
  428.       if rsttime = "00:00:00" then leave
  429.    end
  430.    address value portname
  431.    lister select handle '"'files.i'"' off
  432.    lister clear handle progress
  433.    lister refresh handle full
  434. end
  435. lister set handle busy off
  436. address 'JUKEBOX.0'
  437. STOP
  438. UNLOCKGUI
  439. return
  440.  
  441. /*---Unterprogramm Titel speichern---------------------------------------------------------------*/
  442. SaveCDAs:
  443. T_FLAG=1
  444. SaveCD:
  445. address 'JUKEBOX.0'
  446. INQUIRY
  447. CDROM=substr(result,9,4)
  448.  
  449. if showlist("H","CDDA")~=1 & exists(CDDA_FS) then do
  450.     call pragma("STACK",10000)
  451.     address command "mount "CDDA_FS  /* CDDA Filesystem (Jukebox) mounten */
  452.     end
  453.  
  454. address value portname
  455. select
  456.     when CDROM="TOSH" & showlist("H","CDDA")=1 then dopus request '"'getcatstr(11,'Speichern von Audiodaten:'lf'Bitte das Speicherformat wählen.')'"' 'MP2|8SVX|MONO|AIFF|RAW|WAVE|VOC|AU|ADPCM3|'getcatstr(12,'Abbruch')
  457.     when CDROM="SONY" & showlist("H","CDDA")=1 then dopus request '"'getcatstr(11,'Speichern von Audiodaten:'lf'Bitte das Speicherformat wählen.')'"' 'MP2|8SVX|MONO|AIFF|RAW|WAVE|VOC|AU|'getcatstr(12,'Abbruch')
  458.     when showlist("H","CDDA")=1 then dopus request '"'getcatstr(11,'Speichern von Audiodaten:'lf'Bitte das Speicherformat wählen.')'"' 'MP2|AIFF|RAW|WAVE|VOC|AU|'getcatstr(12,'Abbruch')
  459.     when CDROM="TOSH" then dopus request '"'getcatstr(11,'Speichern von Audiodaten:'lf'Bitte das Speicherformat wählen.')'"' 'MP2|8SVX|MONO|AIFF|ADPCM3|'getcatstr(12,'Abbruch')
  460.     when CDROM="SONY" then dopus request '"'getcatstr(11,'Speichern von Audiodaten:'lf'Bitte das Speicherformat wählen.')'"' 'MP2|8SVX|MONO|AIFF|'getcatstr(12,'Abbruch')
  461.     otherwise do
  462.     dopus request '"'getcatstr(17,'Fehler:'lf'CDDA V1.12 unterstützt nur SONY & TOSHIBA CDROM-Laufwerke.'lf'Für NEC, Hitachi, Pioneer, Sanyo etc. bitte das CDDA-Filesystem installieren.')'"' getcatstr(16,'Zurück')
  463.     return
  464.     end
  465. end
  466. SP_FLAG=RC
  467.  
  468. if SP_FLAG=0 then return
  469.  
  470. if CDROM="TOSH" & ((SP_FLAG=5 & showlist("H","CDDA")~=1) | SP_FLAG=9) then do
  471.     if ~exists(CDRip) then do
  472.        dopus request '"'getcatstr(14,'Leider ist ein Fehler aufgetreten:'lf'Das externe Programm CDRipper (aktueller Pfad %s ) wurde nicht gefunden.',CDRip)'"' getcatstr(16,'Zurück')
  473.        return
  474.            end
  475.    FT=".adpcm3"
  476.    end
  477.    else do
  478.    if (SP_FLAG=1 | SP_FLAG=2 | SP_FLAG=3 | SP_FLAG=4) & (CDROM="TOSH" | CDROM="SONY") then do
  479.     if ~exists(CDSave) then do
  480.        dopus request '"'getcatstr(14,'Leider ist ein Fehler aufgetreten:'lf'Das externe Programm CDDA V1.12 (aktueller Pfad %s ) wurde nicht gefunden.',CDSave)'"' getcatstr(16,'Zurück')
  481.        return
  482.            end
  483.     call open('file','ENV:CDDA_DEVICE',W)
  484.     call writech('file',DEVICE)
  485.     call close ('file')
  486.     call open('file','ENV:CDDA_UNIT',W)
  487.     call writech('file',UNIT)
  488.     call close ('file')
  489.        end
  490.        else do
  491.            if (CDROM~="SONY" & CDROM~="TOSH" & showlist("H","CDDA")=1) & SP_FLAG~=1 then SP_FLAG=SP_FLAG+2
  492.            if ~exists(Amisox) & SP_FLAG~=5 then do
  493.        dopus request '"'getcatstr(15,'Leider ist ein Fehler aufgetreten:'lf'Das externe Programm AmiSOX (aktueller Pfad %s ) wurde nicht gefunden.'lf'Wählen Sie Speichern als RAW.',Amisox)'"' getcatstr(16,'Zurück')
  494.        return
  495.            end
  496.        end
  497.    if SP_FLAG=1 then FT=".mp2"
  498.    if SP_FLAG=2 then FT=".8svx"
  499.    if SP_FLAG=3 then FT=".mono"
  500.    if SP_FLAG=4 then FT=".aiff"
  501.    if SP_FLAG=5 then FT=".cdr"
  502.    if SP_FLAG=6 then FT=".wave"
  503.    if SP_FLAG=7 then FT=".voc"
  504.    if SP_FLAG=8 then FT=".au"
  505. end
  506.  
  507. address 'JUKEBOX.0'
  508. STOP
  509. LOCKGUI
  510. address value portname
  511. lister set handle busy on
  512. lister set user busy on
  513. if event='dropfrom' then do
  514.    files.count=1
  515.    LNG=POS('22'x,titel,2)-1
  516.    titel=left(titel,LNG)
  517.    files.0=right(titel,LNG-1)
  518.    end
  519.    else lister query handle selfiles stem files.
  520. lister set handle progress files.count getcatstr(18,'Speichere Audiodaten ...')
  521. lister refresh handle full  
  522. lister query user path
  523. Zielpfad=result
  524.  
  525. do i=0 to files.count-1
  526.    titel=strip(left(substr(files.i,4),24))
  527.    tracknr=strip(left(files.i,2),"B"," ")
  528.    if length(tracknr)=1 then tracknr="0"tracknr
  529.    if titel=cdstring then titel="track"tracknr
  530.    address JUKEBOX.0
  531.    SET TRACK left(files.i,2)
  532.    CURRENT BLOCK
  533.    TRACKSTART=result
  534.    CURRENT TRKTIME
  535.    SUBTIME result RESTTIME
  536.    trtime=result
  537.    TRACKLEN=left(trtime,2)*4500+substr(trtime,4,2)*75+right(trtime,2)
  538.           TOC left(files.i,2)
  539.           TRACKINFO=result
  540.           NPOS=pos('22'x,TRACKINFO)       /* Trackinfo zerlegen */
  541.           SONGNAME=substr(TRACKINFO,NPOS+1,length(TRACKINFO)-NPOS-1)
  542.     ZEIT=left(TRACKINFO,5)
  543.    address value portname
  544.    lister set handle progress count i+1
  545.    lister set handle progress name titel||FT
  546.    lister query handle abort
  547.    if result then leave
  548.    if getcatstr(6,'Daten Track') ~= substr(files.i,4) then do  /* Datentrack überspringen */
  549.      if T_FLAG=1 then do
  550.        command beep
  551.        dopus getstring '"'getcatstr(13,'Bitte neuen Namen eingeben')'"' 24 '"'titel'"' 'OK|'getcatstr(12,'Abbruch') 
  552.        if DOPUSRC=0 then leave
  553.        ttitel=result
  554.        if ttitel~="RESULT" then titel=ttitel
  555.           lister set handle progress name titel||FT
  556.        end 
  557.     if (CDROM="TOSH" | CDROM="SONY") then do
  558.              if FT=".aiff" then address command CDSave||" START="||TRACKSTART||" LENGTH="||TRACKLEN||" FILE="'"'||Zielpfad||titel||FT'"'||" MUTE"
  559.              if FT=".8svx" then address command CDSave||" START="||TRACKSTART||" LENGTH="||TRACKLEN||" FILE="'"'||Zielpfad||titel||FT'"'||" MUTE 8SVX"
  560.              if FT=".mono" then address command CDSave||" START="||TRACKSTART||" LENGTH="||TRACKLEN||" FILE="'"'||Zielpfad||titel||FT'"'||" MUTE 8SVX MONO"
  561.        end
  562.      else do
  563.            if FT=".aiff" then address command Amisox||" -traw -r44100 -c2 -x -sw CDDA:track"tracknr" -taiff  "'"'||Zielpfad||titel||FT'"'
  564.        end
  565.         if FT=".adpcm3" then address command CDRip||" "||left(files.i,2)||" to "||'"'Zielpfad||titel||FT'"'||" bits=3 Device="||DEVICE||" Unit="||Unit
  566.     if FT=".cdr"  then address command "copy CDDA:track"tracknr" to "'"'||Zielpfad||titel||FT'"'||" QUIET"
  567.         if FT=".wave" then address command Amisox||" -traw -r44100 -c2 -x -sw CDDA:track"tracknr" -twav "'"'||Zielpfad||titel||FT'"'
  568.         if FT=".voc"  then address command Amisox||" -traw -r44100 -c2 -x -sw CDDA:track"tracknr" -tvoc "'"'||Zielpfad||titel||FT'"'
  569.         if FT=".au"   then address command Amisox||" -traw -r44100 -c2 -x -sw CDDA:track"tracknr" -U -r8000 "'"'||Zielpfad||titel||FT'"'
  570.     if FT=".mp2" then do
  571.         call pragma("STACK",40000)
  572.         address command
  573.         "setenv MPEGTABLES "||MPEGTAB
  574.         if (CDROM="TOSH" | CDROM="SONY") then CDSave||" START="||TRACKSTART||" LENGTH="||TRACKLEN||" FILE="'"'||Zielpfad||titel'"'||" MUTE"
  575.                    else Amisox||" -traw -r44100 -c2 -x -sw CDDA:track"tracknr" -taiff  "'"'||Zielpfad||titel'"'
  576.         MPEGENC" "'"'||Zielpfad||titel'"'" "'"'||Zielpfad||titel||FT'"'        
  577.         "Delete >NIL: "'"'||Zielpfad||titel'"'
  578.         end
  579.     if (CDROM="TOSH" | CDROM="SONY") & (FT=".aiff" | FT=".8svx" | FT=".mono" | FT=".mp2") then ZEIT=left(trtime,5)
  580.          address command "FILENOTE >NIL: "'"'Zielpfad||titel||FT'"'" "'"'ZEIT" "left(cdname,32,'20'x)" "SONGNAME'"'
  581.          end
  582.    address value portname
  583.    lister select handle '"'files.i'"' off
  584.    lister refresh handle full
  585. end
  586.  
  587. lister set handle busy off
  588. lister set user busy off
  589. lister read user Zielpfad force
  590. lister refresh user full
  591. address 'JUKEBOX.0'
  592. UNLOCKGUI
  593. return
  594.  
  595. /*---Unterprogramm Copyright---------------------------------------------------------------------*/
  596. Productinfo:
  597. address 'JUKEBOX.0'
  598. INQUIRY
  599. CDROM=substr(result,9)
  600. CURRENT LABEL
  601. cdlabel=result
  602. CURRENT CDTIME
  603. cdgesamt=result
  604. GETATTR VERSION FULL
  605. Jukeversion=result
  606. GETATTR PROJECT FILENAME
  607. Projekt=result
  608. GETATTR PLAYER
  609. Playmod=result
  610. address value portname
  611. do forever
  612.   dopus request '"'getcatstr(19,'Über')' PlayCDDA_JB.dopus5 V1.5:'lf'Copyright ©1996 Eckhard Ludwig'lf'Freely distributable release'lf''lf''Jukeversion'"' getcatstr(23,'Beenden|Über CDROM|Über MP2|Hilfe|Ok')
  613.   if RC=0 then return
  614.   if RC=1 then call Ende
  615.   if RC=2 then dopus request '"'"CDROM="CDROM||lf"Player="Playmod||lf"Device="Device"  Unit="Unit||lf||lf||"Project="Projekt||lf||getcatstr(24,'CD Katalogtitel=%s'lf'CDDA Gesamtspieldauer=%s',cdlabel,cdgesamt)'"' getcatstr(16,'Zurück')
  616.   if RC=4 then dopus request '"'getcatstr(22,'PlayCDDA_JB.dopus5 Kurzhilfe:'lf'Mutterverzeichnis: CD neu einlesen'lf'Doppelklick: Spielen ab geklickten Titel'lf'Abspielen: Spiele alle selektierten Titel'lf'Anzeigen: Spiele alle selektierten Titel kurz an'lf'Kopieren: Selektierte Titel speichern'lf'Schublade: CD auswerfen')'"' getcatstr(16,'Zurück')
  617.   if RC=3 then do
  618.     POS1=pos("-m",MPEGENC)
  619.     if POS1>0 then CM=substr(MPEGENC,POS1+3,1)
  620.     POS1=pos("-d",MPEGENC)
  621.     if POS1>0 then DE=substr(MPEGENC,POS1+3,1)
  622.     POS1=pos("-b",MPEGENC)
  623.     if POS1>0 then BitR=substr(MPEGENC,POS1+3,3)
  624.     else BitR="382"
  625.    select
  626.     when CM="d" then CMode="Dual channel"
  627.     when CM="j" then CMode="Joint stereo"
  628.     when CM="m" then CMode="Single channel"
  629.     otherwise CMode="Stereo"
  630.        end
  631.    select
  632.     when DE="5" then DEE="50/15 microsec"
  633.     when DE="c" then DEE="CCITT j.17"
  634.     otherwise DEE="None"
  635.        end
  636.    dopus request '"'"MPEG Encoder Configuration:"lf"Layer = 2"lf"Channel Mode = "CMode||lf"Total bitrate = "BitR" kbps"lf"De-emphasis = "DEE'"' getcatstr(16,'Zurück')
  637.    end
  638. end
  639. /*---Unterprogramm Audio-CD einlegen-------------------------------------------------------------*/
  640. Meldung1:
  641.   address value portname
  642.   dopus request '"'getcatstr(25,'Fehler:'lf'Bitte eine Audio-CD einlegen')'"' getcatstr(26,'Beenden|Ok')
  643.   if RC=1 then call Ende
  644.   do i= 1 to 90  /* wait max 90sec */
  645.      address value portname
  646.      lister query handle busy /* wurde inzwischen Lister geschlossen ?*/
  647.      if RC>0 then leave
  648.      address 'JUKEBOX.0'     
  649.      MAXTRACK=numtrks()
  650.      if MAXTRACK>0 then return
  651.      WAIT ABSOLUTE '00:01:00'
  652.   end
  653. /*---Unterprogramm Programm beenden--------------------------------------------------------------*/
  654. Ende:
  655. address value portname
  656. lister close handle
  657. dopus remtrap '*' 'playcdda-handler'
  658. call closeport('playcdda-handler')
  659. address 'JUKEBOX.0'
  660. if CDDA=1 then EJECT
  661. exit
  662. /*---Unterprogramm Tracks ermitteln--------------------------------------------------------------*/
  663. numtrks:
  664. TOC stem names.
  665. if rc=0 then return(names.0-1)
  666. else return(0)
  667. /*---Unterprogramm Lokalisierung (Dank an Edmund Vermeulen)--------------------------------------*/
  668. getcatstr:
  669.    parse arg msgno,msgstring,insert.1,insert.2
  670.    if catalog~=0 then msgstring=getcatalogstr(catalog,msgno,msgstring)
  671.    j=0
  672.    do while pos('%s',msgstring)>0
  673.       parse var msgstring fore '%s' aft
  674.       j=j+1
  675.       msgstring=fore||insert.j||aft
  676.       end
  677.    return msgstring
  678. /*---Unterprogramm Syntaxfehler------------------------------------------------------------------*/
  679. syntax:
  680. if rc=13 then call Ende /* Jukebox wurde über GUI beendet */
  681. say 'Syntax Error' rc',' errortext(rc) 'in line' sigl'.'
  682. return
  683.